// #include <stdio.h>
// #include <stdlib.h>
//
// typedef struct LinkNode {
//     int data;
//     struct LinkNode* next;
// } LinkNode;
//
// typedef struct LinkList {
//     LinkNode* head;
// } LinkList;
//
// LinkList* LinkInit() {
//     LinkList* list = (LinkList*)malloc(sizeof(LinkList));
//     if (list == NULL) {
//         exit(1);
//     }
//     list->head = (LinkNode*)malloc(sizeof(LinkNode));
//     list->head->next = NULL;
//     return list;
// }
//
// void LinkInsert(LinkList* list, int data) {
//     LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
//     if (newNode == NULL) {
//         perror("malloc");
//         exit(1);
//     }
//     newNode->data = data;
//     newNode->next = NULL;
//     LinkNode* current = list->head;
//     while (current->next != NULL) {
//         current = current->next;
//     }
//     current->next = newNode;
// }
//
// void printLinkList(LinkList* list) {
//     LinkNode* current = list->head->next;
//     while (current != NULL) {
//         printf("%d ", current->data);
//         current = current->next;
//     }
//     printf("\n");
// }
//
// void Reverse(LinkList* L) {
//     if (L == NULL || L->head == NULL) {
//         return;
//     }
//     LinkNode* prev = NULL;
//     LinkNode* current = L->head->next;
//     LinkNode* next = NULL;
//     while (current != NULL) {
//         next = current->next;
//         current->next = prev;
//         prev = current;
//         current = next;
//     }
//     L->head->next = prev;
// }
//
// void Split(LinkList* L, LinkList* A, LinkList* B) {
//     if (L == NULL || A == NULL || B == NULL) {
//         return;
//     }
//     LinkNode* p = L->head->next;
//     LinkNode* aTail = A->head;
//     LinkNode* bTail = B->head;
//     int isOdd = 1; // 标记奇偶位置
//
//     while (p != NULL) {
//         LinkNode* next = p->next;
//         if (isOdd) {
//             // 奇数位置，插入到 A
//             aTail->next = p;
//             aTail = aTail->next;
//             aTail->next = NULL;
//         } else {
//             // 偶数位置，插入到 B
//             bTail->next = p;
//             bTail = bTail->next;
//             bTail->next = NULL;
//         }
//         p = next;
//         isOdd = !isOdd;
//     }
//
//     // 反转 B 链表
//     Reverse(B);
// }
//
// void FreeLinkList(LinkList* list) {
//     if (list == NULL) {
//         return;
//     }
//     LinkNode* current = list->head;
//     while (current != NULL) {
//         LinkNode* next = current->next;
//         free(current);
//         current = next;
//     }
//     free(list);
// }
//
// int main() {
//     LinkList* L = LinkInit();
//     LinkList* A = LinkInit();
//     LinkList* B = LinkInit();
//
//     LinkInsert(L, 3);
//     LinkInsert(L, 4);
//     LinkInsert(L, 1);
//     LinkInsert(L, 2);
//     LinkInsert(L, 7);
//     LinkInsert(L, 5);
//
//     printf("Original list L: ");
//     printLinkList(L);
//
//     Split(L, A, B);
//
//     printf("List A (odd positions): ");
//     printLinkList(A);
//
//     printf("List B (even positions, reversed): ");
//     printLinkList(B);
//
//     // 注意：拆分后 L 的节点已被转移到 A 和 B，无需释放 L
//     FreeLinkList(A);
//     FreeLinkList(B);
//     free(L->head);
//     free(L);
//
//     return 0;
// }